package org.example;

import org.example.dao.UserDAOImpl;
import org.example.entity.User;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 1.获取请求数据
 *     常见错误:404,405,500等，遇到错误问题后，先区别前端还是后端问题?
 *     判断标准:请求是否已到达Servlet中。
 * 2.调用业务方法，实现系统功能的一系列方法，调用JDBC相关数据库操作。
 * 3.响应数据
 */
@WebServlet("/myhttp")
public class MyHttp extends HttpServlet {
    //service请求既可以接收get请求,也接收post 优先显示
//    @Override
//    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//        String ttp = servletRequest.getParameter("ttp");
//        System.out.println("获取用户"+ttp);
//        //设置响应及格式编码
//        servletResponse.setContentType("text/html;charset=UTF-8");
//        PrintWriter out = servletResponse.getWriter();
//        out.write("收到哦"+ttp);
//        out.flush();
//        out.close();
//    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("请求到达service");
        UserDAOImpl userDAO = new UserDAOImpl();
        User u =new User();
        u.setUserID(1);
        User user = userDAO.selectOne(u);
        PrintWriter out = resp.getWriter();
        out.write(user.getUsername());
        out.flush();
        out.close();
    }

//    @Override
//    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("请求到达doGet");
//    }
//
//    @Override
//    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("请求到达doPost");
//    }
}
/**
 * 请求方式（类型）：Get。Post
 * Get方式：
 *   1.浏览器地址栏
 *   2.超链接：<a href="URL"></a> <img src="URL"> <link href="URL"></link> <script src="URL"></script>
 *   3.JavaScript中：window.location.href = "URL"
 * Post方式：
 *   1.第三方接口测试工具，Postman，Apifox
 *   2.表单标签：<form action="URI" method="Get | Post"></form>
 *   3.使用XMLHttpRequest、Ajax或基于 Promise 的异步请求，可设置 Get | Post
 *
 * JavaBean:一个具有规范的Java类，应该包括无参构造方法，满足封装原则(属性私有，公开Get|Set)，实现 Serializable 接口。
 * 软件设计架构:三层架构
 *     1.界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
 *     2、业务逻辑层:处理业务逐辑的，具体实现的业务方法，例:登录，注册，上传下载(导入导出)，查询信息，搜索，删除，收藏.....
 *     3.数据访问层:操作数据库表等。CRUD增删改查等，可能也会有关于事务，存储过程，触发器
 */